Upgrade all dependencies across monorepo#892
Conversation
- Upgrade all packages to latest versions across web, backend, db, shared-schema, aurora-sync, crypto, and moonboard-ocr packages - Migrate backend from zod v3 to v4: update z.record() to require key schema, replace ZodError.errors with .issues, replace errorMap with error option in z.enum() - Remove deprecated stub type packages (@types/bcryptjs, @types/uuid) that now ship their own types - Fix vitest.config.ts vite plugin type mismatch from dual vite versions Notable major version upgrades: - jose: 4.x → 6.x - zod (backend): 3.x → 4.x - nodemailer: 7.x → 8.x - commander: 12.x → 14.x - jsdom: 27.x → 28.x - @faker-js/faker: 9.x → 10.x - next: 16.1.1 → 16.1.6 - @sentry/nextjs: 10.32.1 → 10.40.0 https://claude.ai/code/session_01JU1orYWk44pttrbyeriLrH
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Claude Review✅ Ready to merge - Minor issues noted below, but nothing blocking. Minor Issues
Verified
|
vite was listed as a direct dependency in packages/web but is only used transitively through vitest. This caused two vite versions to be installed (7.3.0 at root from moonboard-ocr's vitest, 7.3.1 nested in web), leading to a type mismatch between @vitejs/plugin-react and vitest/config. Removing the direct dependency lets everything resolve to a single hoisted version, eliminating the need for the `as any` cast on the plugin. https://claude.ai/code/session_01JU1orYWk44pttrbyeriLrH
Claude Review✅ Ready to merge - The dependency upgrades are well-executed with proper Zod v4 migration. Minor notes below. Notes
|
Move BoardSeshHeader inside <main> to eliminate the double offset caused by it sitting in the flow before main while main also has paddingTop: var(--global-header-height). Also tighten ClimbsList container and header box padding. https://claude.ai/code/session_016LMRegRb8Y2AXmzj4zLceE
The climb list actions drawer had no opening animation because it was
conditionally rendered ({isActionsOpen && <SwipeableDrawer open={...}>}),
mounting already in the open state so MUI's Slide transition had no
"from" state. Fix by always rendering with open prop control and
keepMounted={false} for list performance.
Also convert 3 components using raw MUI Drawer to the shared
SwipeableDrawer for consistent swipe-to-close, responsive drag
handles, and animation behavior:
- gym-detail.tsx
- board-detail.tsx
- board-creation-banner.tsx
Fix conditional rendering in gym-search-results and board-search-results
that coupled data availability with open state, preventing animation.
https://claude.ai/code/session_01KR9PpCUWDVkV33uu3eUuRp
Remove the duplicate SearchPill from BoardSeshHeader and bridge the climb filter drawer to the global header via a new SearchDrawerBridge context. On the climb list page, the global header's search pill now shows the filter summary (e.g. "V5-V7 · Tall") and opens the climb filter accordion directly. On other pages it falls back to the generic "Search" behavior. - Create SearchDrawerBridgeContext with Provider/Injector/hook pattern (mirrors QueueBridge architecture) - Add SearchDrawerBridgeProvider to PersistentSessionWrapper - BoardSeshHeader registers with bridge on list pages, keeps the UnifiedSearchDrawer in the board route tree for context access - GlobalHeader consumes bridge to show filter summary and active dot - Delete unused SearchPill component and CSS module https://claude.ai/code/session_01JNoJKNSydEBDLteHtYGk5g
- Add 13 tests for SearchDrawerBridgeContext covering: - Provider default state (no injector) - Injector register/deregister lifecycle - Summary and filter updates - openDrawer callback delegation - isOnListPage toggle behavior - Update GlobalHeader tests (8 new) covering bridge integration: - Filter summary pill text display - Active indicator dot visibility - Click delegation to bridge drawer - Onboarding button ID transfer - Fallback to generic "Search" when bridge inactive - Simplify SearchDrawerBridgeInjector: reduce 3 effects to 2 by using refs for mutable values, removing eslint-disable comments All 1210 tests pass across 75 test files. https://claude.ai/code/session_01JNoJKNSydEBDLteHtYGk5g
…docs Replace useLayoutEffect with a useIsomorphicLayoutEffect wrapper that falls back to useEffect on the server, preventing Next.js hydration warnings. Update social-features-plan.md to replace deleted SearchPill references with the current SearchDrawerBridge architecture. https://claude.ai/code/session_011oaALoRPAYV5BfnAFLeFbR
When users visit a /b/slug/angle/list URL and then navigate home, clicking the Climbs tab would generate an old-format URL from the persistent session's board details instead of using the stored /b/ URL. Fix the priority in handleClimbsTab to check getLastUsedBoard() first when not on a board page, since it preserves the correct URL format. Also store boardSlug in LastUsedBoardData and prefer /b/ URLs when selecting saved configs that match a server board. https://claude.ai/code/session_01Pb4dCMiY1L4RrzEDf8KT1n
- Restructure handleClimbsTab so the final fallback only triggers when isOnBoardPage && !listUrl, avoiding a duplicate async call - Move config lookup before the server board match in handleSavedConfigSelect so layout/size/set metadata is passed to handleSelectBoard even when using a /b/ slug URL https://claude.ai/code/session_01Pb4dCMiY1L4RrzEDf8KT1n
…l page When viewing playlists from a board-scoped route, the list page now filters by both boardType and layoutId (previously only boardType). The playlist detail page now auto-selects the matching board filter using SSR-fetched board data to avoid a flash from "All" to the selected board. - Add optional layoutId to GetAllUserPlaylistsInput GraphQL schema - Update allUserPlaylists resolver to filter by layoutId (includes playlists with null layoutId for Aurora-synced circuits) - Pass layoutId from library-page-content when board is selected - Pass boardSlug/boardConfig to PlaylistDetailContent from both board slug and legacy route pages - Fetch initialMyBoards server-side for instant board filter selection https://claude.ai/code/session_018EN9pUTJVfWkza7fiicjuW
Fetch boards, user playlists, and discover playlists server-side and pass as initial data to LibraryPageContent. This eliminates loading skeletons on first render and ensures the board filter, playlist grid, and discover sections render immediately from SSR. - Add serverUserPlaylists() and cachedDiscoverPlaylists() to server-cached-client.ts - Update LibraryPageContent to accept initialMyBoards, initialPlaylists, and initialDiscoverPlaylists props - Use hasDataRef pattern to avoid re-showing loading skeleton on client-side refetches when SSR data is available - Update all 3 playlist list page routes (board slug, legacy, global) to fetch SSR data in parallel and pass it down https://claude.ai/code/session_018EN9pUTJVfWkza7fiicjuW
- Extract findMatchingBoard into shared utility (packages/web/app/lib/ find-matching-board.ts), replacing duplicate implementations in library-page-content.tsx and playlist-detail-content.tsx - Remove redundant client-side playlist filter (server already filters by boardType + layoutId) - Simplify render conditions from (isAuthenticated || hasInitialPlaylistData) to just isAuthenticated - Replace non-null assertion on or() with explicit type guard in allUserPlaylists resolver - Add backend tests for allUserPlaylists resolver layoutId filtering (7 tests covering auth, boardType, layoutId, null layoutId, empty, ordering) - Add frontend tests for findMatchingBoard utility (10 tests covering null/undefined/empty boards, slug matching, config matching, precedence) https://claude.ai/code/session_018EN9pUTJVfWkza7fiicjuW
Claude Review✅ Ready to merge - Minor issues noted below, but nothing blocking. The dependency upgrades and Zod v4 migration look correct, with comprehensive tests added for new functionality. Minor Issues
Test CoverageGood test coverage added for new functionality:
DocumentationNo doc updates needed - changes don't affect documented systems in |
Claude Review✅ Ready to merge - Dependency upgrades and Zod v4 migration look correct. Minor observations below, but nothing blocking. Observations
Zod v4 Migration - Looks Correct
Test Coverage - Good
Documentation
|
Claude Review✅ Ready to merge - Minor issues noted below, but nothing blocking. Issues
Test QualityNew tests are well-structured with good coverage:
DocumentationNo documentation updates needed - changes don't affect documented systems in |
Notable major version upgrades:
https://claude.ai/code/session_01JU1orYWk44pttrbyeriLrH